/* socket.c */
#include "socket.h"

int socket_init(const char *ipaddr, const char *port)
{
    int s_fd; // 套接字文件描述符
    int ret;

    struct sockaddr_in server_addr; // 服务器地址结构体

    memset(&server_addr, 0, sizeof(server_addr)); // 清零服务器地址结构体

    s_fd = socket(AF_INET, SOCK_STREAM, 0); // 创建TCP/IP套接字
    if (s_fd == -1)
    {
        printf("创建套接字失败！\n");
        perror("socket");
        return -1;
    }

    server_addr.sin_family = AF_INET;         // 设置服务器地址结构体的地址族为IPv4
    server_addr.sin_port = htons(atoi(port)); // 设置服务器地址结构体的端口号
    inet_aton(ipaddr, &server_addr.sin_addr); // 设置服务器IP地址

    ret = bind(s_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)); // 绑定IP地址和端口号
    if (ret == -1)
    {
        printf("绑定IP地址和端口号失败！\n");
        perror("bind");
        return -1;
    }

    ret = listen(s_fd, 1); // 监听套接字
    if (ret == -1)
    {
        printf("监听套接字失败！\n");
        perror("listen");
        return -1;
    }

    return s_fd; // 返回套接字文件描述符
}
